//Source file: C:\\Postgrado\\Tesis de Grado\\Diagramas\\src\\com\\obelisco\\data\\UsuarioData.java

package com.obelisco.modelo.data;

import java.util.Date;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

import org.hibernate.validator.Email;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;

import ucla.encuestaMatic.modelo.data.Persona;

import com.obelisco.modelo.beans.OrientacionMenu;
import com.obelisco.modelo.beans.TipoMenu;
import com.obelisco.modelo.data.auxiliares.Archivo;
 

public class Usuario extends DataGenerica {

	public static final String CAMBIO_CLAVE_SI  = "S"; 
	public static final String CAMBIO_CLAVE_NO = "N";
	
	private String login;
	private String contrasena;
	private String nombrecompleto;
	private String descripcion;
	private Boolean desistema = false;
	private Archivo foto = new Archivo();
	private Boolean concorreo = true;
	private String direccioncorreo;
	private Date fechacreacion;	
	private Long nivelpermiso;
	private String cambioclave = CAMBIO_CLAVE_NO;
	private String tipoMenu = TipoMenu.BARRA;
	private String orientacionMenu = OrientacionMenu.VERTICAL;
	private Properties perfil = new Properties();
	private Rol rol;
	private Set preferidos = new HashSet();
	private Set<Grupo> grupos = new HashSet<Grupo>();
	private CarpetaTransaccion funciones;	
	private Set funcionespreferidas = new HashSet<Transaccion>();
	private Persona persona;

	
	public Usuario() {
		super(Usuario.class);
		// TODO Auto-generated constructor stub
	}
	
	public Boolean isConcorreo() {
		return concorreo;
	}

	public String getContrasena() {
		return contrasena;
	}

	public String getDescripcion() {
		return descripcion;
	}

//	public boolean isDesistema() {
//		return desistema;
//	}

	@Length(max=14,message="EL LOGIN {error.longitud}")
	@NotEmpty(message="{error.ingrese} EL LOGIN")
	public String getLogin() {
		return login;
	}

	@Length(max=250,message="EL NOMBRE COMPLETO {error.longitud}")
	@NotEmpty(message="{error.ingrese} EL NOMBRE COMPLETO")
	public String getNombrecompleto() {
		return nombrecompleto;
	}

	@Email(message="{error.email}")
	public String getDireccioncorreo() {
		return direccioncorreo;
	}

	public Properties getPerfil() {
		return perfil;
	}

	public Set getPreferidos() {
		return preferidos;
	}

	public Rol getRol() {
		return rol;
	}

	public void setRol(Rol rol) {
		this.rol = rol;
	}

	public void setPreferidos(Set preferidos) {
		this.preferidos = preferidos;
	}

	public void setPerfil(Properties perfil) {
		this.perfil = perfil;
	}

	public void setNombrecompleto(String nombrecompleto) {
		this.nombrecompleto = nombrecompleto;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public void setDireccioncorreo(String direccioncorreo) {
		this.direccioncorreo = direccioncorreo;
	}

//	public void setDesistema(boolean desistema) {
//		this.desistema = desistema;
//	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}

	public void setConcorreo(Boolean concorreo) {
		this.concorreo = concorreo;
	}

	public Archivo getFoto() {
		return foto;
	}

	public void setFoto(Archivo foto) {
		this.foto = foto;
		if (this.foto != null) {
			this.foto.setNombre("foto.jpg");
			if (this.foto.getContenido().length > 0) {
				this.foto.setTipo(Archivo.determinarTipo(foto.getContenido()));
			} else {
				this.foto.setContenido(new byte[] {});
				this.foto.setTipo("");
			}
		} else {
			this.foto = new Archivo();
		}
	}
	
	public Set<Grupo> getGrupos() {
		return grupos;
	}

	public void setGrupos(Set<Grupo> grupos) {
		this.grupos = grupos;
	}

	public CarpetaTransaccion getFunciones() {
		return funciones;
	}

	public void setFunciones(CarpetaTransaccion funciones) {
		this.funciones = funciones;
	}

	public Date getFechacreacion() {
		return fechacreacion;
	}

	public void setFechacreacion(Date fechacreacion) {
		this.fechacreacion = fechacreacion;
	}

	public Long getNivelpermiso() {
		return nivelpermiso;
	}

	public void setNivelpermiso(Long nivelpermiso) {
		this.nivelpermiso = nivelpermiso;
	}
	
	public Boolean getDesistema() {
		return desistema;
	}

	public void setDesistema(Boolean desistema) {
		this.desistema = desistema;
	}

	public String getCambioclave() {
		return cambioclave;
	}

	public void setCambioclave(String cambioclave) {
		this.cambioclave = cambioclave;
	}

	@NotNull(message="{error.seleccione} LA ORIENTACION DEL MENU.")
	public String getOrientacionMenu() {
		return orientacionMenu;
	}

	public void setOrientacionMenu(String orientacionMenu) {
		this.orientacionMenu = orientacionMenu;
	}

	@NotNull(message="{error.seleccione} EL TIPO DE MENU.")
	public String getTipoMenu() {
		return tipoMenu;
	}

	public void setTipoMenu(String tipoMenu) {
		this.tipoMenu = tipoMenu;
	}

	public Set getFuncionespreferidas() {
		return funcionespreferidas;
	}

	public void setFuncionespreferidas(Set funcionesPreferidas) {
		this.funcionespreferidas = funcionesPreferidas;
	}

	public Persona getPersona() {
		return persona;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	@Override
	public int hashCode() {
		final int PRIME = 31;
		int result = 1;
		result = PRIME * result + ((login == null) ? 0 : login.hashCode());
		return result;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return getLogin() + " - "+getNombrecompleto();
	}

	@Override
	public boolean equals(DataGenerica objeto) {
		// TODO Auto-generated method stub
		if (objeto instanceof Usuario) {
			return ((Usuario)objeto).login.equals(this.login);
		}
		return false;
	}

/*
	public Persona getPersona() {
		return persona;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}
*/

	// public List<Grupo> getListGrupos() {
	// return listGrupos;
	// }
	//
	// public void setListGrupos(List<Grupo> listGrupos) {
	// this.listGrupos = listGrupos;
	//	}
	
	

}
